home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Windows Expert
/
Windows Expert.iso
/
windownt
/
perlnt.zip
/
registry.txt
< prev
next >
Wrap
Text File
|
1993-07-25
|
10KB
|
279 lines
-----------------------------------------------------------------------------
Registry.txt
-----------------------------------------------------------------------------
This file documents the extentions to Perl for NT that allow perl
scripts access to the NT registry database. All Registry API's have
been duplicated as user defined perl subroutines, with the exception
of RegNotifyChangeKeyValue. This routine was not implemented due to
time constraints and due to it's usefulness in perl scripts not being
immediately apparent. It may be implemented in the future.
IMPORTANT NOTE: It is possible to make your system unbootable by
corrupting the registry database! Use EXTREME caution when writing a
perl script that updates the registry! Also note that none of the
routines that actually modify the files that comprise the registry
have been tested. Only the routines that read or write keys/values in
the existing registry have been tested.
The Perl registry access subroutines nearly duplicate the Win32 API
for registry calls. Although they are not perl-like, it was felt that
the perl calls should look as nearly like the documentation provided
with NT as possible. Hopefully this will minimize confusion when using
them.
The main difference between the C registry routines and the perl
versions of them is that whenever a size option is specified as an
argument to a C routine, that parameter is omitted from the perl
version, since perl already knows how big a scalar is and will
dynamically size a parameter used to return a value.
Note that all arguments to the perl registry routines are SCALARS.
Passing in arrays to the enumeration functions would be convienent, so
that it would not be nessesary to iterate when enumerating keys or
values, but again, time constraints interferred. This feature may be
implemented in a later release.
Some routines are documented in the Win32 API help file as having been
provided only for Windows 3.1 compatiblity. These routines include
RegCreateKey, RegOpenKey, RegEnumKey, RegQueryValue, and RegSetValue.
All of these routines have new versions with "Ex" appended to their
names which are the preferred version for use in new applications. In
implementing these routines in the Perl interpreter, all calls were
made to the new and improved versions of these routines so that
compatibility problems will be avoided when Microsoft upgrades
software. So, a perl script making the call:
&RegOpenKey($HKEY_LOCAL_MACHINE, "SOFTWARE\\Intergraph", $h);
actually boils down to a call to RegOpenKeyEx with appropriate
defaults in the perl interpreter.
For more information on the contents of the registry and on accessing
the registry, see the help file for the registry editor (RegEdit), the
API documentation in the Win32 API help file, and the Microsoft
Windows NT Resource Guide (Preliminary March 1993).
Conventions:
$hkey: refers to a key handle value. Either one of the
predefined variables or a value returned from
RegOpenKey[Ex] or RegCreateKey[Ex].
$newhkey: the parameter where a new handle will be returned.
$subkey: a string used as a subkey of the specified key
handle.
$sam: a security access mask (on of the $KEY_* variables).
$valname: a scalar that either specifies a value name or
receives a value name.
$index: a unsigned integer used when enumerating subkeys or
values of a key.
$reserved: a parameter that Microsoft has reserved for future
use. Should be zero, but in fact is ignored.
All of the Registry access routines return a success or failure
status with the actual return value from the routine in $!. This
allows you to write code such as this:
$keystring = "SOFTWARE\\Description\\Intergraph\\Perl";
&RegCreateKey($HKEY_LOCAL_MACHINE, $keystring, $newhkey) ||
die "Can't open $keystring: $!\n";
If the call to RegCreateKeyEx fails then it's error code is
stored in $!. The failure status causes the die routine to be
called which prints the string corresponding to the error number
and then terminates the perl process.
Variables:
$LoginName - login name of current user
$NodeName - network name of local machine
Pre-defined key handles
$HKEY_CLASSES_ROOT
$HKEY_CURRENT_USER
$HKEY_LOCAL_MACHINE
$HKEY_USERS
Security Access Mask values
$KEY_ALL_ACCESS
$KEY_CREATE_SUB_KEY
$KEY_ENUMERATE_SUB_KEYS
$KEY_EXECUTE
$KEY_NOTIFY
$KEY_QUERY_VALUE
$KEY_READ
$KEY_SET_VALUE
$KEY_WRITE
Data types from the registry
$REG_BINARY - binary data
$REG_DWORD - 32 bit value
$REG_DWORD_LITTLE_ENDIAN - 32 bit value in little endian byte order
$REG_DWORD_BIG_ENDIAN - 32 bit value in big endian (network) byte order
$REG_EXPAND_SZ - null terminated string with environment variables
$REG_LINK - symbolic link within registry
$REG_MULTI_SZ - multiple null terminated strings
$REG_NONE - no type associated with this value
$REG_RESOURCE_LIST - device resource list
$REG_SZ - null terminated string
Subroutines:
&RegCloseKey ($hkey)
$hkey - an open key handle from a call to RegCreateKey,
RegCreateKeyEx, RegOpenKey, or RegOpenKeyEx.
&RegConnectRegistry ($machine, $hkey, $newhkey)
$machine - name of an NT system.
$hkey - one of $HKEY_LOCAL_MACHINE or $HKEY_USERS.
$newkey - new handle for access on remote machine.
&RegCreateKey ($hkey, $subkey, $newhkey)
$hkey - open key handle.
$subkey - string value specifying subkey of currently open key.
$newhkey - new handle.
&RegCreateKeyEx ($hkey, $subkey, $reserved, $class, $options, $sam,
$SecAttrib, $newhkey, $disposition)
$hkey - open key handle.
$subkey - string identifying the subkey to create/open
$reserved - ignored
$class - class name for new key
$options - indicates if new key is volatile or not
$sam - security access mask.
$SecAttrib - security attributes structure (packed data)
$newhkey - new handle.
$disposition -
&RegDeleteKey ($hkey, $subkey)
$hkey - open key handle
$subkey - string identifying the subkey to delete
&RegDeleteValue ($hkey, $valname);
$hkey - open key handle
$valname - name of value to delete
&RegEnumKey ($hkey, $index, $subkey)
$hkey - open key handle
$index - numeric index of key to enumerate
$subkey - returned key name
&RegEnumKeyEx ($hkey, $index, $subkey, $reserved, $class, $time)
$hkey - open key handle
$index - numeric index of key to enumerate
$subkey - returned key name
$reserved - must be zero
$class - returned class name of $subkey
$time - time of last modification of $subkey
&RegEnumValue ($hkey, $index, $valname, $reserved, $type, $data)
$hkey - open key handle
$index - numeric index of key to enumerate
$valname - returned value name
$reserved - must be zero
$type - returned type of $valname
$data - data associated with $valname (of data type $type)
&RegFlushKey ($hkey)
$hkey - open key handle
&RegGeyKeySecurity ($hkey, $SecInf, $SecDesc)
$hkey - open key handle
$SecInf - Security information structure (packed)
$SecDesc - returned Security Descriptor data (packed)
&RegLoadKey ($hkey, $subkey, $file)
$hkey - open key handle
$subkey - string identifying subkey of $key
$file - string identifying filename to load information from
&RegOpenKey ($hkey, $subkey, $newhkey)
$hkey - open key handle
$subkey - string identifying subkey of $key
$newhkey - returned key handle
&RegOpenKeyEx ($hkey, $subkey, $reserved, $sam, $newhkey)
$hkey - open key handle
$subkey - string identifying subkey of $key
$reserved - must be zero
$sam - requested security access mask
$newhkey - returned key handle
&RegQueryInfoKey ($hkey, $class, $reserved, $nsubkeys, $maxsubkey,
$maxclass, $nvalues, $maxvalname, $maxvaldata,
$SecDesc, $time)
$hkey - open key handle
$class - returned key class (string)
$reserved - must be zero
$nsubkey - number of subkeys for this key
$maxsubkey - size of largest subkey
$maxclass - size of largest class name
$nvalues - number of values associated with this key
$maxvalname - size of largest value name
$manvaldata - size of largest value data
$SecDesc - Security Descriptor (packed data)
$time - time of last write
&RegQueryValue ($hkey, $subkey, $value)
$hkey - open key handle
$subkey - string identifying the subkey of key to query
$value - returned value for first NULL valname
&RegQueryValueEx ($hkey, $valname, $reserved, $type, $data)
$hkey - open key handle
$valname - string identifying value to retreive
$reserved - must be zero
$type - returned type of $data
$data - returned data associated with $valname
&RegReplaceKey ($hkey, $subkey, $newfile, $oldfile)
$hkey - open key handle
$subkey - string identifying subkey of $key
$newfile - file to put into registry
$oldfile - name for old registry file
&RegRestoreKey ($hkey, $file, $flags)
$hkey - open key handle
$file - name of file to restore key from
$flags - indicates if key data is volatile
&RegSaveKey ($hkey, $file, $SecAttrib)
$hkey - open key handle
$file - file in which to save key and subkeys.
$SecAttrib - security attributes for new file (packed data)
&RegSetKeySecurity ($hkey, $SecInf, $SecDesc);
$hkey - open key handle
$SecInf - Security Information structure (packed data)
$SecDesc - Security Descriptor structure (packed data)
&RegSetValue ($hkey, $subkey, $type, $data)
$hkey - open key handle
$subkey - string indentifying subkey
$type - data type of $data
$data - data to associate with $subkey (NULL name)
&RegSetValueEx ($hkey, $valname, $reserved, $type, $data)
$hkey - open key handle
$valname - name of value to set
$reserved - must be zero
$type - data type of $data
$data - data to associate with valname
&RegUnLoadKey ($hkey, $subkey)
$hkey - open key handle
$subkey - string that identifies subkey tree to be unloaded